import axios from 'axios'
import useToken from '../stores/token'
import { ElLoading } from 'element-plus'
import config from '../config'
import notification from './notification'
import router from '../router'

// 定义基础URL
const baseURL = config.baseURL

// 定义loading实例
var loadingInstance = null

// 创建axios实例
const service = axios.create({
	baseURL
})

// 添加请求拦截器
service.interceptors.request.use(config => {
	// 显示loading
	loadingInstance = ElLoading.service()
	// 获取token
	const {
		token
	} = useToken()
	// 如果有token，则添加到请求头中
	if (token) {
		config.headers.jwt = token
	}
	return config
})

// 添加响应拦截器
service.interceptors.response.use(
	response => {
		// 关闭loading
		loadingInstance.close()
		// 解构响应数据
		const {
			errno,
			data,
			errmsg
		} = response.data
		// 如果errno为0，表示请求成功
		if (errno === 0) {
			// 如果errmsg不为空，则显示成功提示
			if (errmsg !== '') {
				notification({
					message: errmsg,
					type: 'success'
				})
			}
			// 返回data
			return data || true
		}
		notification({
			message: errmsg,
			type: 'error'
		})
		if (errno === 2) {
			router.push({
				name: 'login'
			})
		}
		return false
	},
	error => {
		loadingInstance.close()
		notification({
			message: '请求失败',
			type: 'error'
		})
		console.log(error)
	}
)

export default service